mir: set placement for menu-type windows
authorWilliam Hua <william.hua@canonical.com>
Mon, 13 Mar 2017 07:36:30 +0000 (03:36 -0400)
committerWilliam Hua <william.hua@canonical.com>
Mon, 13 Mar 2017 07:36:30 +0000 (03:36 -0400)
gdk/mir/gdkmirwindowimpl.c

index 0c737e3d6fe1e0a22cf432a9e07712181a754cf8..0a4008c891137d9042db8d5b7e12313598ad0f21 100644 (file)
@@ -427,6 +427,7 @@ create_spec (GdkWindow        *window,
 {
   MirWindowSpec *spec = NULL;
   GdkWindow *parent;
+  MirRectangle rect;
 
   spec = create_window_type_spec (impl->display,
                                   impl->transient_for,
@@ -468,6 +469,41 @@ create_spec (GdkWindow        *window,
                                      impl->rect_anchor_dx,
                                      impl->rect_anchor_dy);
     }
+  else
+    {
+      switch (impl->type_hint)
+        {
+        case GDK_WINDOW_TYPE_HINT_MENU:
+        case GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU:
+        case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
+        case GDK_WINDOW_TYPE_HINT_TOOLBAR:
+        case GDK_WINDOW_TYPE_HINT_COMBO:
+        case GDK_WINDOW_TYPE_HINT_DND:
+        case GDK_WINDOW_TYPE_HINT_TOOLTIP:
+        case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
+          rect.left = impl->transient_x;
+          rect.top = impl->transient_y;
+          rect.width = 1;
+          rect.height = 1;
+
+          mir_window_spec_set_placement (spec,
+                                         &rect,
+                                         mir_placement_gravity_southeast,
+                                         mir_placement_gravity_northwest,
+                                         (mir_placement_hints_flip_x |
+                                          mir_placement_hints_flip_y |
+                                          mir_placement_hints_slide_x |
+                                          mir_placement_hints_slide_y |
+                                          mir_placement_hints_resize_x |
+                                          mir_placement_hints_resize_y),
+                                         -window->shadow_left,
+                                         -window->shadow_top);
+
+          break;
+        default:
+          break;
+        }
+    }
 
   return spec;
 }
@@ -1128,7 +1164,8 @@ _gdk_mir_window_set_final_rect (GdkWindow    *window,
   gint unflipped_offset;
   gint flipped_offset;
 
-  g_return_if_fail (impl->has_rect);
+  if (!impl->has_rect)
+    return;
 
   best_rect = get_unflipped_rect (&impl->rect,
                                   window->width,